#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import xml.etree.ElementTree as ET
import sys
reload(sys)
sys.setdefaultencoding('utf8')


XML_FILE = 'test.xml'

tree = ET.parse(XML_FILE)
root = tree.getroot()

#   tag(): 字符串类型，标识标识次元素类型
#   text():  元素内容
#   attrib():  属性字典
#   clear(): 清楚所有子元素
#   get(key, default=None): 获取key的元素属性，返回属性值，默认None
#   items(): 将元素属性以元组形式返回
#   keys():  列表形式返回属性名称
#   set(key, value): 将元素上的属性设置为value
#  以下方法适用于元素子元素
#   append(subelement): 添加子元素
#   extend(subelements)：零个或多个元素序列追加子元素
#   find(match)：查找匹配第一个子元素，返回一个元素示例或None
#   findall(match): 按照标签名称寻找子元素
#   findtext(match, default=None)：匹配第一个子元素的文本，match可以是标签名
#   insert(index, element):在元素指定位置插入子元素
#   iter(tag=None): 使用当前元素作为跟创建树迭代器
#   iterfind(match): 按照标签名和xpath查找所有匹配的子元素，返回迭代
#   itertext()：创建文本迭代器，迭代器按照文本顺序遍历元素和子元素，返回全部文本
#   makeelement(tag, attrib)：创建与元素具有相同类型的新元素对象
#   remove(subelement): 从元素中删除子元素
# 注意：没有子元素的元素为False

######### read ###########

print(root, type(root))
for i in root.attrib:
     print(i, root.attrib[i])


for child in root:
    print(child.tag, (child.attrib), child.text)

head = root.find("head")
print(head, head.tag, head.attrib, head.text, head.tail)

datas = root.find('datas')
# for data in datas.findall('data'):
for data in datas:
    id = data.find('id').text
    print(id)

for osid in datas.iter('osId'):
    print(osid.text, osid.tag, osid.attrib)



######### modify ###########
for id in datas.iter('id'):
    new_id = int(id.text) + 1
    print(id.text, new_id)
    id.text = str(new_id)
    id.set('update', 'yes')

# tree.write('tmp.xml')
ET.dump(tree)

for data in datas:
    if data.find('id').text == '1531':
        datas.remove(data)

# tree.write('tmp.xml')
ET.dump(tree)

new_tree = ET.Element('a')
new_tree.text = '\n\t'
b1 = ET.SubElement(new_tree, 'b')
b1.text = '\n\t\t'
b1.set('xx', 'value')
b2 = ET.SubElement(new_tree, 'b')
c = ET.SubElement(b1, 'c')
c.text = '\n\t'
c = ET.SubElement(new_tree, 'c')

ET.dump(new_tree)

b1.clear()
ET.dump(new_tree)

print(root.find('a'))
